﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Insifo.WE;
using System.Text.RegularExpressions;
using System.Collections.Specialized;


public partial class genGrupoReporteEditar : ObjectPage
{
    #region CONSTANTES

    private const string RUTA_LISTA = "~/gen/genGrupoReporteListar.aspx";

    #endregion

    #region PROPIEDADES

    public WCGrupoReporte.BEGrupoReporte GrupoReporte
    {
        get { return (WCGrupoReporte.BEGrupoReporte)ViewState["GrupoDato"]; }
        set { ViewState["GrupoDato"] = value; }
    }

    #endregion PROPIEDADES
    
    #region EVENTOS

    protected void Page_Load(object sender, EventArgs e)
    {
        //Eventos del Master
        Master.MenuAccionEvento += new MasterPageMenuEditarClickHandler(Master_MenuButton);
        if (!IsPostBack)
        {            
            Cargar();
        }
        ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "RegistrarScriptsIni", "javascript:RegistrarScriptsIni();", true);
    }

    protected void Master_MenuButton(object sender, EventArgs e)
    {
        string strAccion = ((CommandEventArgs)e).CommandName;
        switch (strAccion)
        {
            case "Aceptar":
                Guardar("G");
                break;
            case "Aplicar":
                Guardar("A"); 
                break;
            case "Cancelar":
                Salir();
                break;
        }
    }

    #endregion

    #region METODOS

    protected void Cargar()
    {
        string strAccion =  Request.QueryString["a"];   //a: N-Nuevo, e-Editar, v-Ver
        string strId = Request.QueryString["i"];  //Id
        string strIdAp = Request.QueryString["ap"];  //Id de Aplicacion
        //Eventos Java Script
        this.Master.MenuAceptar.Attributes.Add("OnClick", "javascript:return fnValidar();");
        //Carga Aplicacion
        //Util.loadComboAndItem(ddlIdAplicacion, ListarAplicacion(), "Descripcion", "IdAplicacion", "--Seleccione--", "0");
        Util.loadComboAndItem(ddlIdAplicacion, ListarAplicaciones(), "Descripcion", "IdAplicacion", "Suit", string.Format("--{0}--", Resources.resDiccionario.Todos), "0");
        //Carga Estado
        Util.loadCombo(ddlEstado, ListarParametroDetalle(1, 1, Constantes.PARAMETRO_ESTADOREGISTRO), "Descripcion", "ParametroDetalle");
        //Carga Estado
        Util.loadCombo(ddlEstadoReporte, ListarParametroDetalle(1, 1, Constantes.PARAMETRO_ESTADOREGISTRO), "Descripcion", "ParametroDetalle");
                
        //Carga Tipo
        Util.loadCombo(ddlTipo, ListarParametroDetalle(1, 1, Constantes.PARAMETRO_TIPOREPORTE), "Descripcion", "ParametroDetalle");
        lnkGeneral.HRef = string.Format("#{0}", tabGeneral.ClientID);
        lnkDetalle.HRef = string.Format("#{0}", tabDetalle.ClientID);

        switch (strAccion)
        {
            case "n":
                Master.SubTitulo.Text =  Resources.resDiccionario.Nuevo;
                Nuevo();
                break;
            case "e":
                Master.SubTitulo.Text =  Resources.resDiccionario.Editar;
                Editar(strAccion, strId, strIdAp);
                
                break;
            case "d":
                Master.SubTitulo.Text =  Resources.resDiccionario.Inactivar;
                Editar(strAccion, strId, strIdAp);
                break;
            default:
               Master.SubTitulo.Text =  Resources.resDiccionario.Unknow;
                break;
        }
    }

    protected void Nuevo()
    {
        hfIdGrupo.Value = "0";
        hfAccion.Value = "n"; //Nuevo
        txtIdGrupoReporte.Text = string.Empty;
        txtIdGrupoReporte.Enabled = false;
        txtDescripcion.Text = string.Empty;
        ddlIdAplicacion.SelectedIndex = 0;
        ddlTipo.SelectedIndex = 0; 
        
        //Datos de Auditoria
        ddlEstado.SelectedIndex = 0; //Representa el primero
        txtUsuarioCreacion.Text = string.Empty;
        txtFechaCreacion.Text = string.Empty;
        txtUsuarioModificacion.Text = string.Empty;
        txtFechaModificacion.Text = string.Empty;
    }

    protected void Editar(string pstrAccion, string pstrIdGrupoReporte, string pstrIdAplicacion)
    {

        WCGrupoReporte.BEGrupoReporte be = new WCGrupoReporte.BEGrupoReporte
        {
            IdGrupoReporte = Int32.Parse(pstrIdGrupoReporte)
        };
        be = ObtenerGrupoReporte(be);

        hfIdGrupo.Value = pstrIdGrupoReporte;
        hfIdAplicacion.Value = pstrIdAplicacion;
        hfAccion.Value = pstrAccion; //Editar/Eliminar
        txtIdGrupoReporte.Text = hfIdGrupo.Value;
        txtIdGrupoReporte.Enabled = false;
        ddlIdAplicacion.Enabled = false;
        txtDescripcion.Text = be.Descripcion;
        Util.SelectCombo(ddlIdAplicacion, be.IdAplicacion.ToString());
        Util.SelectCombo(ddlTipo, be.Tipo);

        //Datos de Auditoria
        Util.SelectCombo(ddlEstado, be.Estado);
        txtUsuarioCreacion.Text = be.UsuarioCreacion;
        txtFechaCreacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
        txtUsuarioModificacion.Text = be.UsuarioModificacion;
        txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);

        if (pstrAccion == "d")
        {
            Master.MenuAplicar.Visible = false; //Remueve el boton aplicar
            txtIdGrupoReporte.Enabled = false;
            txtDescripcion.Enabled = false;
            ddlIdAplicacion.Enabled = false;
            ddlTipo.Enabled = false;
            ddlEstado.Enabled = false;

            if (be.Estado == Constantes.ESTADO_ACTIVO)
            {
                Util.SelectCombo(ddlEstado, Constantes.ESTADO_INACTIVO);
            }
            else
            {
                Util.SelectCombo(ddlEstado, Constantes.ESTADO_ACTIVO);
            }
        }

        //Listar Conceptos
        ListarReporte();
    }

    protected bool Validar(out WCGrupoReporte.BEGrupoReporte pbe)
    {
        pbe = new WCGrupoReporte.BEGrupoReporte();
        string strDescripcion = string.Empty, strIdMenu = string.Empty;
        string strUsuario = string.Empty, strEstado = string.Empty, strIdAplicacion = string.Empty;
        string strAccion = string.Empty, strTipo = string.Empty;

        strAccion = hfAccion.Value; //a: n-Nuevo, e-Editar, v-Ver

        strDescripcion = txtDescripcion.Text.Trim();
        strIdAplicacion = ddlIdAplicacion.SelectedValue;
        strTipo = ddlTipo.SelectedValue;

        strEstado = ddlEstado.SelectedValue;
        strUsuario = UsuarioSistema.CodigoUsuario;

        //Inicializa
        WCGrupoReporte.BEGrupoReporte be = new WCGrupoReporte.BEGrupoReporte
        {
            IdGrupoReporte = Int32.Parse(hfIdGrupo.Value),
            Descripcion = strDescripcion,
            IdAplicacion = Int32.Parse(strIdAplicacion),
            Tipo = strTipo,
      
            Estado = strEstado,
            UsuarioCreacion = strUsuario,
            FechaCreacion = DateTime.Now,
            UsuarioModificacion = strUsuario,
            FechaModificacion = DateTime.Now
        };
        pbe = be;
        return true;
    }

    protected void Guardar(string pstrEvento) //G:Grabar, A:Aplicar
    {
        string strAccion = string.Empty;
        string strUsuario = string.Empty;

        strAccion = hfAccion.Value; //a: n-Nuevo, e-Editar, v-Ver
        strUsuario = UsuarioSistema.CodigoUsuario;

        WCGrupoReporte.BEGrupoReporte be;
         
        if (!Validar(out be)) //Valida e Inicializa
        {
            return;
        }

        //Grabar
        switch (strAccion)
        {
            case "n": //Nuevo
                be = InsertarGrupoReporte(be);
                if (be.Error != 0)
                {
                    if (be.Error == -2)
                    {
                        Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", "El código ya existe."));
                    }
                    else
                    {
                        Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", "Error al registrar el Grupo."));
                    }
                }
                else
                {
                    hfAccion.Value = "e";
                    hfIdGrupo.Value = be.IdGrupoReporte.ToString();
                    txtIdGrupoReporte.Text = be.IdGrupoReporte.ToString();
                    txtUsuarioCreacion.Text = strUsuario;
                    txtFechaCreacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
                    txtUsuarioModificacion.Text = strUsuario;
                    txtFechaModificacion.Text = be.FechaCreacion.ToString(AppSettings.FormatoFechaHora);
                }
                
                break;
            case "e": //Actualiza
                be = ActualizarGrupoReporte(be);
                if (be.Error != 0)
                {
                    if (be.Error == -2)
                    {
                        Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgAlertaCodigoExiste));
                    }
                    else
                    {
                        Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgErrorRegistrar));
                    }
                }
                else
                {
                    txtUsuarioModificacion.Text = strUsuario;
                    txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);
                }
                break;
            case "d": //Elimina
                be = EliminaGrupoReporte(be);
                if (be.Error != 0)
                {
                    Util.ejecutaScriptAJAX(this.Page, string.Format("alert('{0}');", Resources.resMensaje.msgErrorActualizar));
                }
                txtUsuarioModificacion.Text = strUsuario;
                txtFechaModificacion.Text = be.FechaModificacion.ToString(AppSettings.FormatoFechaHora);

               
                break;
        }
        if (pstrEvento == "G") //Si es GRABAR redirecciona a la Lista
        {
            if (be.Error == 0)
            {
                Salir();
            }
        }
    }

    protected void Salir()
    {
        string strCadena = string.Format("?a=l&param1={0}", HttpUtility.UrlDecode(Request.QueryString["param1"]));
        Util.Redireciona(RUTA_LISTA, strCadena, true);
    }
    
    #endregion

    #region TAB CONCEPTOS

    protected void ibtNuevoReporte_Click(object sender, ImageClickEventArgs e)
    {
        NuevoReporte();
    }

    protected void lvReporte_ItemCommand(object sender, ListViewCommandEventArgs e)
    {
        ReporteOperacion(e.CommandName, e.Item);
    }

    protected void lvReporte_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
        BoundReporte(e.Item);
    }

    protected void ddlEstadoReporte_SelectedIndexChanged(object sender, EventArgs e)
    {
        ucpagListaReportes.NumeroPagina = 1;
        ListarReporte();
    }

    protected void ListarReporte()
    {
        int intTotalFilas = 0, intFilasXPagina = 0;
        //Obtiene lo ultimos no eliminados  
        WCReporte.BEReporte[] arrNuevo = null;
        arrNuevo = ListarReporte(int.Parse(hfIdGrupo.Value), string.Empty, ddlEstadoReporte.SelectedValue, ucpagListaReportes.NumeroPagina);

        lvReporte.DataSource = arrNuevo;
        lvReporte.DataBind();
        if (arrNuevo.Length > 0)
        {
            intFilasXPagina = arrNuevo[0].FilasXPagina;
            intTotalFilas = arrNuevo[0].TotalFilas;
        }
        ucpagListaReportes.TotalRegistros = intTotalFilas;
        ucpagListaReportes.RegistrosPorPagina = intFilasXPagina;
        ucpagListaReportes.EnlazarPaginador();
    }

    protected void NuevoReporte()
    {
        DataSet ds = new DataSet();
        lvReporte.EditIndex = -1;
        lvReporte.InsertItemPosition = InsertItemPosition.LastItem;
        ListarReporte();
        lblNuevoDetalle.Visible = false;
        ibtNuevoReporte.Visible = false;
    }

    protected void ReporteOperacion(string pstrComando, ListViewItem plviObj)
    {
        switch (pstrComando)
        {
            case Constantes.ACCION_GRABARNUEVO:
                GrabarReporteNuevo(plviObj);
                break;
            case Constantes.ACCION_EDITAR:
                EditarReporte(plviObj);
                break;
            case Constantes.ACCION_GRABAR:
                GrabarReporte(plviObj);
                break;
            case Constantes.ACCION_CANCELAR:
                CancelarReporte();
                break;
            case Constantes.ACCION_ELIMINAR:
                EliminarReporte(plviObj);
                break;
        }
    }

    protected void GrabarReporteNuevo(ListViewItem plceArg)
    {
        //Crear un item:
        TextBox txtDetalleInsertIdReporte = (TextBox)plceArg.FindControl("txtDetalleInsertIdReporte");
        TextBox txtDetalleInsertCodigoReporte = (TextBox)plceArg.FindControl("txtDetalleInsertCodigoReporte");
        TextBox txtDetalleInsertDescripcion = (TextBox)plceArg.FindControl("txtDetalleInsertDescripcion");
        TextBox txtDetalleInsertFormulario = (TextBox)plceArg.FindControl("txtDetalleInsertFormulario");
        TextBox txtDetalleInsertComentario = (TextBox)plceArg.FindControl("txtDetalleInsertComentario");
        CheckBox chkDetalleInsertMostrar = (CheckBox)plceArg.FindControl("chkDetalleInsertMostrar");

        TextBox txtDetalleInsertValorTexto1 = (TextBox)plceArg.FindControl("txtDetalleInsertValorTexto1");
        TextBox txtDetalleInsertValorTexto2 = (TextBox)plceArg.FindControl("txtDetalleInsertValorTexto2");
        TextBox txtDetalleInsertValorTexto3 = (TextBox)plceArg.FindControl("txtDetalleInsertValorTexto3");

        DropDownList ddlDetalleInsertEstado = (DropDownList)plceArg.FindControl("ddlDetalleInsertEstado");

        WCReporte.BEReporte be = new WCReporte.BEReporte
        {
            RefGuid = Guid.NewGuid().ToString(),
            IdGrupoReporte = int.Parse(hfIdGrupo.Value),
            CodigoReporte = txtDetalleInsertCodigoReporte.Text.Trim(),
            Descripcion = txtDetalleInsertDescripcion.Text.Trim(),
            Formulario = txtDetalleInsertFormulario.Text.Trim(),
            Comentario = txtDetalleInsertComentario.Text.Trim(),
            Estado = ddlDetalleInsertEstado.SelectedValue,
            RefAccion = WCReporte.DbTipoAccion.Insertar,
            UsuarioCreacion = UsuarioSistema.CodigoUsuario,
            Mostrar = chkDetalleInsertMostrar.Checked == true ? "S" : "N",
            ValorTexto1 = txtDetalleInsertValorTexto1.Text,
            ValorTexto2 = txtDetalleInsertValorTexto2.Text,
            ValorTexto3 = txtDetalleInsertValorTexto3.Text
        };

        InsertarReporte(be);
        //// Cancela el modo de Insersion de ventana
        CancelarModoInsertar();
        //// Listar el Detalle 
        ListarReporte();
    }

    protected void GrabarReporte(ListViewItem plceArg)
    {

        //Obtiene los valres ingresados
        HiddenField hfDetalleEditIdReporte = (HiddenField)plceArg.FindControl("hfDetalleEditIdReporte");
        TextBox txtDetalleEditCodigoReporte = (TextBox)plceArg.FindControl("txtDetalleEditCodigoReporte");
        TextBox txtDetalleEditDescripcion = (TextBox)plceArg.FindControl("txtDetalleEditDescripcion");
        TextBox txtDetalleEditFormulario = (TextBox)plceArg.FindControl("txtDetalleEditFormulario");
        TextBox txtDetalleEditComentario = (TextBox)plceArg.FindControl("txtDetalleEditComentario");
        CheckBox chkDetalleEditMostrar = (CheckBox)plceArg.FindControl("chkDetalleEditMostrar");

        TextBox txtDetalleEditValorTexto1 = (TextBox)plceArg.FindControl("txtDetalleEditValorTexto1");
        TextBox txtDetalleEditValorTexto2 = (TextBox)plceArg.FindControl("txtDetalleEditValorTexto2");
        TextBox txtDetalleEditValorTexto3 = (TextBox)plceArg.FindControl("txtDetalleEditValorTexto3");

        DropDownList ddlDetalleEditEstado = (DropDownList)plceArg.FindControl("ddlDetalleEditEstado");

        WCReporte.BEReporte be = new WCReporte.BEReporte
        {
            IdGrupoReporte = int.Parse(hfIdGrupo.Value),
            IdReporte = int.Parse(hfDetalleEditIdReporte.Value),
            CodigoReporte = txtDetalleEditCodigoReporte.Text.Trim(),
            Descripcion = txtDetalleEditDescripcion.Text.Trim(),
            Formulario = txtDetalleEditFormulario.Text.Trim(),
            Comentario = txtDetalleEditComentario.Text.Trim(),
            Estado = ddlDetalleEditEstado.SelectedValue,
            UsuarioModificacion = UsuarioSistema.CodigoUsuario,
            Mostrar = chkDetalleEditMostrar.Checked == true ? "S" : "N",

            ValorTexto1 = txtDetalleEditValorTexto1.Text,
            ValorTexto2 = txtDetalleEditValorTexto2.Text,
            ValorTexto3 = txtDetalleEditValorTexto3.Text
        };

        ActualizarReporte(be);

        lvReporte.EditIndex = -1;

        //// Cancela el modo de Insersion
        CancelarModoInsertar();
        //// Listar el Detalle de Salida
        ListarReporte();
    }

    protected void EliminarReporte(ListViewItem plceArg)
    {
        HiddenField hfDetalleItemEstado = (HiddenField)plceArg.FindControl("hfDetalleItemEstado");
        HiddenField hfDetalleItemIdReporte = (HiddenField)plceArg.FindControl("hfDetalleItemIdReporte");
        WCReporte.BEReporte be = new WCReporte.BEReporte
        {
            IdGrupoReporte = int.Parse(hfIdGrupo.Value),
            IdReporte = int.Parse(hfDetalleItemIdReporte.Value),
            Estado = (hfDetalleItemEstado.Value == Constantes.ESTADO_ACTIVO) ? Constantes.ESTADO_INACTIVO : Constantes.ESTADO_ACTIVO,
            UsuarioModificacion = UsuarioSistema.CodigoUsuario,
        };

        EliminarReporte(be);

        lvReporte.EditIndex = -1;

        //// Listar el Detalle de Salida
        ListarReporte();
    }

    protected void EditarReporte(ListViewItem plceArg)
    {
        lvReporte.EditIndex = plceArg.DataItemIndex;
        HiddenField hfDetalleItemGui = (HiddenField)plceArg.FindControl("hfDetalleItemGui");
        // Listar Detalle
        ListarReporte();
    }

    protected void CancelarReporte()
    {
        lvReporte.EditIndex = -1;
        CancelarModoInsertar();
        // Listar Detalle
        ListarReporte();
    }

    protected void BoundReporte(ListViewItem plceArg)
    {
        if (plceArg.ItemType == ListViewItemType.DataItem)
        {
            string strEstado = DataBinder.Eval(plceArg.DataItem, "Estado").ToString();
            if (plceArg.DataItemIndex == lvReporte.EditIndex)
            {
                DropDownList ddlDetalleEditEstado = (DropDownList)plceArg.FindControl("ddlDetalleEditEstado");
                if (ddlDetalleEditEstado != null)
                {
                    Util.SelectCombo(ddlDetalleEditEstado, strEstado);
                }
            }
            else
            {
                ImageButton ibt = (ImageButton)plceArg.FindControl("ibtEliminarItemReporte");
                if (ibt != null)
                {
                    ibt.ImageUrl = (strEstado == Constantes.ESTADO_ACTIVO) ? Constantes.ESTADO_ACTIVO_URL : Constantes.ESTADO_INACTIVO_URL;
                    ibt.ToolTip = (strEstado == Constantes.ESTADO_ACTIVO) ? Resources.resDiccionario.Inactivar : Resources.resDiccionario.Activar;
                }
            }
        }
    }

    protected void CancelarModoInsertar()
    {
        lvReporte.InsertItemPosition = InsertItemPosition.None;
        lblNuevoDetalle.Visible = true;
        ibtNuevoReporte.Visible = true;
    }


    protected void ucpagListaReportes_CambioPagina(object sender, EventArgs e)
    {
        ListarReporte();
    }

    #endregion TAB CONCEPTOS
    
    #region LLAMDAS A WEBSERVICES

    /// <summary>
    /// Método Lista 
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCGrupoReporte.BEGrupoReporte InsertarGrupoReporte(WCGrupoReporte.BEGrupoReporte pbe)
    {
        WCGrupoReporte.BEGrupoReporte be = new WCGrupoReporte.BEGrupoReporte();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCGrupoReporte.IWCGrupoReporte>("BasicHttpBinding_IWCGrupoReporte"))
        {
            var response = client.ServiceOperation<WCGrupoReporte.BEGrupoReporte>(c => c.Insertar(pbe));
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Obtiene 
    /// </summary>
    /// <returns>Devuelve un Objeto</returns>
    protected WCGrupoReporte.BEGrupoReporte ObtenerGrupoReporte(WCGrupoReporte.BEGrupoReporte pbe)
    {
        WCGrupoReporte.BEGrupoReporte be = new WCGrupoReporte.BEGrupoReporte();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCGrupoReporte.IWCGrupoReporte>("BasicHttpBinding_IWCGrupoReporte"))
        {
            var response = client.ServiceOperation<WCGrupoReporte.BEGrupoReporte>(
               c => c.Obtener(pbe)
               );
            ;
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Actualiza
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCGrupoReporte.BEGrupoReporte ActualizarGrupoReporte(WCGrupoReporte.BEGrupoReporte pbe)
    {
        WCGrupoReporte.BEGrupoReporte be = new WCGrupoReporte.BEGrupoReporte();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCGrupoReporte.IWCGrupoReporte>("BasicHttpBinding_IWCGrupoReporte"))
        {
            var response = client.ServiceOperation<WCGrupoReporte.BEGrupoReporte>(
               c => c.Actualizar(pbe)
               );
            ;
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Elimina 
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCGrupoReporte.BEGrupoReporte EliminaGrupoReporte(WCGrupoReporte.BEGrupoReporte pbe)
    {
        WCGrupoReporte.BEGrupoReporte be = new WCGrupoReporte.BEGrupoReporte();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCGrupoReporte.IWCGrupoReporte>("BasicHttpBinding_IWCGrupoReporte"))
        {
            var response = client.ServiceOperation<WCGrupoReporte.BEGrupoReporte>(
               c => c.Eliminar(pbe)
               );
            ;
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Lista 
    /// </summary>
    /// <returns>Devuelve un dataTable</returns>
    protected DataTable ListarGrupoReporte()
    {
        WCGrupoReporte.BEGrupoReporte be = new WCGrupoReporte.BEGrupoReporte();
        be.IdAplicacion = 0;
        be.Descripcion = "";
        be.Tipo = "";    
        be.Estado = "A";
        be.Pagina = 0;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCGrupoReporte.IWCGrupoReporte>("BasicHttpBinding_IWCGrupoReporte"))
        {
            var response = client.ServiceOperation<DataTable>(
               c => c.Listar(be).Tables[0]
               );
            ;
            dt = response;
        }
        return dt;
    }

    /// <summary>
    /// Método Lista Companias
    /// </summary>
    /// <returns>Devuelve un dataTable</returns>
    protected DataTable ListarParametroDetalle(int pintidCompania, int pintIdAplicacion, string pstrParametro)
    {
        WCParametroDetalle.BEParametroDetalle be = new WCParametroDetalle.BEParametroDetalle();
        be.IdCompania = pintidCompania;
        be.IdAplicacion = pintIdAplicacion;
        be.Parametro = pstrParametro;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCParametroDetalle.IWCParametroDetalle>("BasicHttpBinding_IWCParametroDetalle"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar(be).Tables[0]);
            dt = response;
        }
        return dt;
    }

    protected DataTable ListarAplicacion()
    {
        DataTable dt = new DataTable();
        //WCAplicacion.BEAplicacion beAp = new WCAplicacion.BEAplicacion();
        //beAp.IdSuit = 0;
        //beAp.Descripcion = string.Empty;
        //beAp.Estado = "A";
        //beAp.Pagina = 0;
        using (var client = new ServiceClient<WCAplicacion.IWCAplicacion>("BasicHttpBinding_IWCAplicacion"))
        {
            var response = client.ServiceOperation<DataTable>(
                c => c.Listar().Tables[0]
                    );
            ;
            dt = response;
        }
        return dt;
    }

    /// <summary>
    /// Método Lista Niveles de Alerta
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCReporte.BEReporte[] ListarReporte(int pinIdGrupo, string pstrCodigoReporte, string pstrEstado, int pinPagina)
    {
        WCReporte.BEReporte be = new WCReporte.BEReporte();

        be.IdGrupoReporte = pinIdGrupo;
        be.CodigoReporte = pstrCodigoReporte;
        be.Estado = pstrEstado;
        be.Pagina = pinPagina;
        WCReporte.BEReporte[] arr = null;
        using (var client = new ServiceClient<WCReporte.IWCReporte>("BasicHttpBinding_IWCReporte"))
        {
            var response = client.ServiceOperation<WCReporte.BEReporte[]>(c => c.Listar(be));
            arr = response;
        }
        return arr;
    }

    /// <summary>
    /// Método Lista 
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCReporte.BEReporte InsertarReporte(WCReporte.BEReporte pbe)
    {
        WCReporte.BEReporte be = new WCReporte.BEReporte();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCReporte.IWCReporte>("BasicHttpBinding_IWCReporte"))
        {
            var response = client.ServiceOperation<WCReporte.BEReporte>(c => c.Insertar(pbe));
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Actualiza 
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCReporte.BEReporte ActualizarReporte(WCReporte.BEReporte pbe)
    {
        WCReporte.BEReporte be = new WCReporte.BEReporte();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCReporte.IWCReporte>("BasicHttpBinding_IWCReporte"))
        {
            var response = client.ServiceOperation<WCReporte.BEReporte>(
               c => c.Actualizar(pbe)
               );
            ;
            be = response;
        }
        return be;
    }

    /// <summary>
    /// Método Elimina 
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected WCReporte.BEReporte EliminarReporte(WCReporte.BEReporte pbe)
    {
        WCReporte.BEReporte be = new WCReporte.BEReporte();
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCReporte.IWCReporte>("BasicHttpBinding_IWCReporte"))
        {
            var response = client.ServiceOperation<WCReporte.BEReporte>(
               c => c.Eliminar(pbe)
               );
            ;
            be = response;
        }
        return be;
    }

    protected DataTable ListarAplicaciones()
    {

        WCAplicacion.BEAplicacion be = new WCAplicacion.BEAplicacion();
        be.Estado = "A";

        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCAplicacion.IWCAplicacion>("BasicHttpBinding_IWCAplicacion"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar().Tables[0]);
            dt = response;
        }
        return dt;
    }

    #endregion
           
}